import axios from 'axios'

export class AxiosTool {
  /**
   * 下载文件
   * @param url POST URL
   * @param data 提交数据
   * @param fileName 自定义文件名
   * @param type MIME 'application/msexcel'
   */
  download = async (url: string, data: string, fileName: string, type: string) => {
    try {
      // 发送 POST 请求，告诉 axios 预期的响应类型是 blob
      const response = await axios.post(url, data, {
        responseType: 'blob', // 确保返回的数据被视为二进制流
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded' // 根据后端要求调整
        },
        onDownloadProgress: (progressEvent) => {
          // 显示进度（可替换为实际的进度条）
          console.log(progressEvent)
        }
      })

      // 创建一个 Blob 对象
      const blob = new Blob([response.data], { type: type }) // 设置适当的 MIME 类型

      // 创建一个 <a> 元素用于下载
      const link = document.createElement('a')
      link.href = window.URL.createObjectURL(blob)
      link.download = fileName // 设置下载文件名

      // 将 <a> 添加到 DOM 中（虽然不可见）
      document.body.appendChild(link)
      // 触发点击事件立即下载(可保留文件名)
      link.click()

      // 移除 <a>
      document.body.removeChild(link)

      // 释放对象 URL
      window.URL.revokeObjectURL(link.href)
    } catch (error) {
      console.error('文件下载失败:', error)
    }
  }
}
